﻿package com.extra_archive.framework.utils {
	import flash.display.MovieClip;
	import flash.events.*;

	/**
	 * @author implict
	 */
	
	public class FrameUtils
	{
		public static function forwardIt(mc : MovieClip) : void
		{
			mc.removeEventListener("enterFrame", rewind);
			mc.addEventListener(Event.ENTER_FRAME, forward);
		}

		public static function rewindIt(mc : MovieClip) : void
		{
			mc.removeEventListener(Event.ENTER_FRAME, forward);
			mc.addEventListener("enterFrame", rewind);
		}

		public static function f_rewindIt(mc : MovieClip) : void
		{
			mc.removeEventListener(Event.ENTER_FRAME, forward);
			mc.addEventListener("enterFrame", f_rewind);
		}

		private static function forwarding(evt : Event) : void
		{
			evt.currentTarget.removeEventListener("enterFrame", rewind);
			evt.currentTarget.addEventListener("enterFrame", forward);
		}

		private static function rewinding(evt : Event) : void
		{
			evt.currentTarget.removeEventListener("enterFrame", forward);
			evt.currentTarget.addEventListener("enterFrame", rewind);
		}

		private static function forward(evt : Event) : void
		{
			evt.currentTarget.dispatchEvent(new Event("nextFrame"));
			evt.currentTarget.nextFrame();
			if (evt.currentTarget.currentFrame == evt.currentTarget.totalFrames)
			{
				evt.currentTarget.removeEventListener("enterFrame", forward);
				evt.currentTarget.dispatchEvent(new Event("lastFrame"));
			}
		}

		private static function rewind(evt : Event) : void
		{
			evt.currentTarget.dispatchEvent(new Event("prevFrame"));
			evt.currentTarget.prevFrame();
			if (evt.currentTarget.currentFrame == 1)
			{
				evt.currentTarget.removeEventListener("enterFrame", rewind);
				evt.currentTarget.dispatchEvent(new Event("firstFrame"));
			}
		}

		private static function f_forward(evt : Event) : void
		{
			evt.currentTarget.nextFrame();
			evt.currentTarget.nextFrame();
			if (evt.currentTarget.currentFrame == evt.currentTarget.totalFrames)
			{
				evt.currentTarget.removeEventListener("enterFrame", f_forward);
				evt.currentTarget.dispatchEvent(new Event("lastFrame"));
			}
		}

		private static function f_rewind(evt : Event) : void
		{
			evt.currentTarget.prevFrame();
			evt.currentTarget.prevFrame();
			if (evt.currentTarget.currentFrame == 1)
			{
				evt.currentTarget.removeEventListener("enterFrame", f_rewind);
				evt.currentTarget.dispatchEvent(new Event("firstFrame"));
			}
		}

		private static function ff_forward(evt : Event) : void
		{
			evt.currentTarget.nextFrame();
			evt.currentTarget.nextFrame();
			evt.currentTarget.nextFrame();
			if (evt.currentTarget.currentFrame == evt.currentTarget.totalFrames)
			{
				evt.currentTarget.removeEventListener("enterFrame", ff_forward);
				evt.currentTarget.dispatchEvent(new Event("lastFrame"));
			}
		}

		private static function ff_rewind(evt : Event) : void
		{
			evt.currentTarget.prevFrame();
			evt.currentTarget.prevFrame();
			evt.currentTarget.prevFrame();
			if (evt.currentTarget.currentFrame == 1)
			{
				evt.currentTarget.removeEventListener("enterFrame", ff_rewind);
				evt.currentTarget.dispatchEvent(new Event("firstFrame"));
			}
		}

		public static function stop(mc : MovieClip) : void
		{
			mc.removeEventListener("enterFrame", f_forward);
		}
	}
}